float valorCurva1;
boolean autoUpdate=true;
//Control mediante teclado:
void keyReleased() {
  if (controlTeclado) {
    if (metaTextField.hasFocus()==false) {
      if (key == CODED) {
        switch (keyCode) {
        case RIGHT:
          videoLoader.moveForward(1);
          partido.frameUpdate(videoLoader.getFrameNumber());
          break;
        case LEFT:
          videoLoader.moveBackward(1);
          partido.frameUpdate(videoLoader.getFrameNumber());
          break;
        }
      } 
      else {
        switch (key) {
        case ' ':
          videoLoader.togglePlay();
          break;
        case DELETE:
        case BACKSPACE:
          partido.deleteLastGolpe();
          break;
        }
      }
    }
  }
}

void keyPressed() {
  //  if (controlTeclado) {
  //    if (metaTextField.hasFocus()==false) {
  //      switch (key) {
  //      case DELETE:
  //      case BACKSPACE:
  //        partido.deleteLastGolpe();
  //        break;
  //      }
  //    }
  //  }
}

//Control mediante ratón

void zonasRaton() {
  if ((mouseX>18 && mouseX<432) && (mouseY>7 && mouseY<697)) {

    mouseCancha=true;
    if (mouseX > 113 && mouseX< 342 && (mouseY>56 && mouseY<653)) {
      cursor(CROSS);
      bolaDentro=true;
    } 
    else {
      bolaDentro=false;
      cursor(HAND);
    }
  }
  else {
    mouseCancha=false;
    cursor(ARROW);
  }
  if (((mouseX<450) && (mouseY<700)) || (mouseY<400)) {
    controlTeclado=true;//se maneja el video con los cursores y la barra espaciadora
    quitaFoco();
  }
  else {
    controlTeclado=false;
  }
}

void mousePressed() {
  if (mouseY<590 && metaTextField.hasFocus()) {
    metaTextField.setFocus(false);
  } 
  if (estadoAplicacion==1) {
    if (mouseCancha) {
      // pausa el video
      videoLoader.togglePause();

      golpes.add(new Golpe(videoLoader.getFrameNumber(), 0, mouseX, 0, mouseY));
      miniGui=true;
    }
  }
  if (estadoAplicacion==2) {
    curvaEnEdicion.mouseOver();
  }
}

void mouseReleased() {
  if (estadoAplicacion==1) {
    if (mouseCancha) {   
      //  golpe g =(golpe) golpes.get(golpes.size()-1);
      //  guiPunto(int(g.pos.x),int(g.pos.z));
      Golpe g = golpes.get(golpes.size()-1);
      g.setTipo(guiPunto());
      if (!partido.siguienteGolpe(g)) 
        golpes.remove(golpes.size()-1);

      miniGui=false;
      // recupera el video
      videoLoader.togglePause();
    }
  }
  curvaEnEdicion.terminaDeArrastrar();
}

void mouseDragged() {
  if (estadoAplicacion==2) {
    curvaEnEdicion.drag();
  }
}
//Control Sliders
void handleSliderEvents(GSlider slider) {
}

void handleTextFieldEvents(GTextField textfield) { /* code */
}

void handleOptionEvents(GOption option, GOption option2) { /* code */
}


void handleButtonEvents(GButton button) { 
  if (button == metaButton) {
    if (golpes.size()>0) {
      print("Guardar contenido |  " ); 
      Golpe g = golpes.get(golpes.size()-1);
      g.meta = metaTextField.getText();
      println(g.meta);
    }
  }
  if (button == bEstado0) {
    println("Estado 0 -->  KeyFrames");
    estadoAplicacion=0;
  }
  if (button == bEstado1) {
    println("Estado 1 --> XZ");
    estadoAplicacion=1;
  }
  if (button == bEstado2) {
    println("Estado 2 --> Y");
    estadoAplicacion=2;
  }
  controlBotones();

  // Control de los puntos a editar
  if (button == buttonPuntoMas) {
    if (partido.puntoEnEdicion < partido.getNumPuntos()-1) {
//      println("  --  "+partido.puntos.get(partido.puntoEnEdicion));
      partido.puntos.get(partido.puntoEnEdicion).updateJugador();
      partido.puntoEnEdicion++;
      partido.puntos.get(partido.puntoEnEdicion).updateJugador();
      partido.golpeEnEdicion=0;
      limpiaTF();
      if ((estadoAplicacion==2) || (estadoAplicacion==1)) {
        if(autoUpdate){videoLoader.gotoFrame (partido.getFrameGolpeEnEdicion());   }
        videoFrameTextField.setText(""+partido.getFrameGolpeEnEdicion());
      }
    }
  }
  if (button == buttonPuntoMenos) {
    if (partido.puntoEnEdicion > 0) {
    partido.puntos.get(partido.puntoEnEdicion).updateJugador();
    partido.puntoEnEdicion--;
    partido.puntos.get(partido.puntoEnEdicion).updateJugador();
      partido.golpeEnEdicion=0;
      limpiaTF();
      if ((estadoAplicacion==2) || (estadoAplicacion==1)) {
        if(autoUpdate){videoLoader.gotoFrame (partido.getFrameGolpeEnEdicion());   }
        videoFrameTextField.setText(""+partido.getFrameGolpeEnEdicion());
      }
    }
  }
  //control de los golpes dentro de un punto determinado
  if (button == buttonGolpeMas) {
    if (partido.golpeEnEdicion < partido.puntos.get(partido.puntoEnEdicion).golpes.size()-1) {
      partido.golpeEnEdicion++;
      if ((partido.golpeEnEdicion==0) || (partido.golpeEnEdicion==partido.puntos.get(partido.puntoEnEdicion).golpes.size()-1)) {
        cGolpeTipo.setVisible(false);
      }
      if ((estadoAplicacion==2) || (estadoAplicacion==1)) {
        videoFrameTextField.setText(""+partido.getFrameGolpeEnEdicion());
        //videoLoader.gotoFrame (partido.getFrameGolpeEnEdicion());
      }
      limpiaTF();
    }
  }
  if (button == buttonGolpeMenos) {
    if (partido.golpeEnEdicion > 0) {
      partido.golpeEnEdicion--;
      if ((estadoAplicacion==2) || (estadoAplicacion==1)) {
        //videoLoader.gotoFrame (partido.getFrameGolpeEnEdicion());   
        videoFrameTextField.setText(""+partido.getFrameGolpeEnEdicion());
      }   
      limpiaTF();
    }
    if ((partido.golpeEnEdicion==0) || (partido.golpeEnEdicion==partido.puntos.get(partido.puntoEnEdicion).golpes.size()-1)) {
      cGolpeTipo.setVisible(false);
    }
  }
  //Grabar datos
  if (button==buttonSaveChanges) {
    println("Actualizado golpe"); 
    modificaGolpe();

    guardaFicheroPartido(OUTPATH);
    printSpaceSeparated (OUTPATHc4d);
  }

  if (button == btnFrameGo) {
    String cad = trim(videoFrameTextField.getText());
    int f = parseInt(cad);
    println("Texto cadena: "+cad+"  valor en int: "+f);
    //    videoFrameTextField.setText(""+fram);
    videoLoader.gotoFrame(f);
  }

  if (button==btnAddKF) {
    videoKeyFrames.add(videoLoader.getFrameNumber());
    videoKeyFrames.dump(); //save file to keyFrames File
  }

  if (button==btnNextKF) {
    println("avanzar KeyFrame");
    if (videoKeyFrames.currentFrameSet<videoKeyFrames.numberOfKeyFrames()-2) {
      videoKeyFrames.currentFrameSet=videoKeyFrames.currentFrameSet+2;
    }
  }

  if (button==btnPrevKF) {
    println("retroceder KeyFrame");
    if (videoKeyFrames.currentFrameSet>2) {
      videoKeyFrames.currentFrameSet=videoKeyFrames.currentFrameSet-2;
    }
  }
}

void controlBotones() {
  if (estadoAplicacion==0) {
    buttonPuntoMas.setVisible(false);
    buttonPuntoMenos.setVisible(false);
    buttonGolpeMas.setVisible(false);
    buttonGolpeMenos.setVisible(false);
    tfGolpeFrame.setVisible(false);
    tfGolpeX.setVisible(false);
    tfGolpeZ.setVisible(false);
    tfGolpeMeta.setVisible(false);
    cGolpeTipo.setVisible(false);
    buttonSaveChanges.setVisible(false);
    ////////////////////////////////////
    btnNextKF.setVisible(true);
    btnPrevKF.setVisible(true);
    btnDeleteKF.setVisible(false);
    btnAddKF.setVisible(true);
    btnChangeKFINI.setVisible(false);
    btnChangeKFFIN.setVisible(false);
    cJugador.setVisible(false);
  }
  if (estadoAplicacion==1) {
    buttonPuntoMas.setVisible(true);
    buttonPuntoMenos.setVisible(true);
    buttonGolpeMas.setVisible(true);
    buttonGolpeMenos.setVisible(true);
    tfGolpeFrame.setVisible(true);
    tfGolpeX.setVisible(true);
    tfGolpeZ.setVisible(true);
    tfGolpeMeta.setVisible(true);  
    cGolpeTipo.setVisible(true);
    buttonSaveChanges.setVisible(true);
    cJugador.setVisible(true);
    ////////////////////////////////////
    btnNextKF.setVisible(false);
    btnPrevKF.setVisible(false);
    btnDeleteKF.setVisible(false);
    btnAddKF.setVisible(false);
    btnChangeKFINI.setVisible(false);
    btnChangeKFFIN.setVisible(false);
  }

  if (estadoAplicacion==2) {
    buttonPuntoMas.setVisible(true);
    buttonPuntoMenos.setVisible(true);   
    buttonGolpeMas.setVisible(true);
    buttonGolpeMenos.setVisible(true);
    tfGolpeFrame.setVisible(false);
    tfGolpeX.setVisible(false);
    tfGolpeZ.setVisible(false);
    tfGolpeMeta.setVisible(false);
    cGolpeTipo.setVisible(true);  
    buttonSaveChanges.setVisible(true);
    ////////////////////////////////////
    btnNextKF.setVisible(false);
    btnPrevKF.setVisible(false);
    btnDeleteKF.setVisible(false);
    btnAddKF.setVisible(false);
    btnChangeKFINI.setVisible(false);
    btnChangeKFFIN.setVisible(false);
    cJugador.setVisible(false);
  }
}

void handleComboEvents(GCombo combo) { /* code */
}


void quitaFoco() {
  videoFrameTextField.setFocus(false);
  metaTextField.setFocus(false);
  tfGolpeFrame.setFocus(false);
  tfGolpeX.setFocus(false);
  tfGolpeZ.setFocus(false);
  tfGolpeMeta.setFocus(false);
}

void modificaGolpe() {
  if (tfGolpeFrame.getText().length()>1) {
    partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).frame = int(trim(tfGolpeFrame.getText()));
  }
  if (tfGolpeX.getText().length()>1) {
    partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).pos.x = float(trim(tfGolpeX.getText()));
  }
  if (tfGolpeZ.getText().length()>1) {
    partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).pos.z = float(trim(tfGolpeZ.getText()));
  }
  if (tfGolpeMeta.getText().length()>1) {
    partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).meta = tfGolpeMeta.getText();
  }
  if (estadoAplicacion==1) {
    partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).tipo=int(cGolpeTipo.selectedIndex());
  }
  partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).jugador=int(cJugador.selectedIndex());
  partido.puntos.get(partido.puntoEnEdicion).jugadorQueSaca=int(cJugador.selectedIndex());
  partido.puntos.get(partido.puntoEnEdicion).updateJugador();
}

void limpiaTF() {
  tfGolpeFrame.setText(""); 
  tfGolpeMeta.setText("");
  tfGolpeX.setText("");
  tfGolpeZ.setText("");
  cGolpeTipo.setSelected(partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).tipo);
  cJugador.setSelected(partido.puntos.get(partido.puntoEnEdicion).golpes.get(partido.golpeEnEdicion).jugador);
}

